<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			/*
			 * 在调用函数时, 浏览器每次都会传递进两个隐含的对象
			 * 	1. 函数的上下文对象this
			 * 	2. 封装实参的对象arguments
			 * 		- arguments是一个类数组对象, 它可以通过索引来操作数据, 也可以获取长度
			 * 		- 在调用函数时, 我们所传递的实参都会在arguments中保存
			 * 		- arguments.length可以用来获取实参的长度
			 * 		- 我们即使不定义形参, 也可以通过arguments来使用形参
			 * 			arguments[0]	表示第一个实参
			 * 			arguments[1]	表示第二个实参
			 * 		- arguments里面有一个属性叫做calllee
			 * 			这个属性对应一个函数对象, 就是当前执行的函数对象
			 */
			function fun(a){
				console.log(arguments instanceof Object);
				console.log(arguments instanceof Array);
				console.log(Array.isArray(arguments));
				console.log(arguments.length);
				console.log(arguments[1]);
				console.log("a = "+a);
				console.log(arguments.callee == fun);
				// arguments.callee(); 栈溢出
			}
			
			fun("hello", true, 1);
			console.log("\n");
			
			/*
			 * date对象
			 */
			// 创建一个Date对象
			var date = new Date();
			console.log(date);
			
			// 创建一个指定的时间对象
			var date2 = new Date("12/20/2016 11:20:30");		// 避免歧义, 年份一定写完整的
			console.log(date2);
			
			// 获取当前日期对象是几日
			console.log(date.getDate());
			
			// 火气当前日期对象对应的时间戳
			console.log(date.getTime());
			
			
			console.log(new Date("1/1/1970 0:0:0").getTime());
			
			console.log(Date.now());
			console.log("\n");
			
			// 生成一个2到-2之间的随机数
			for(var i = 0; i < 10; i++){
				console.log(Math.round(Math.random() * 4 - 2));
			}
			console.log(0 == -0);		// true
			console.log("\n");
			
			
			var num = new Number(3);
			var num2 = new Number(3);
			num.hello = "你好";
			console.log(num);
			console.log(typeof num);
			console.log(num.hello);
			// 如果使用基本数据类型的对象, 在做一些比较时可能带来不可预料的问题
			console.log(num == num2);
		</script>
	</head>
	<body>
	</body>
</html>
